package clue.players2;

import org.javatuples.Triplet;

import clue.board.Path;
import clue.board.Square;
import clue.cards.Card;
import clue.engine.GameState;
import clue.engine2.GameState2;
import clue.enums.Room;
import clue.enums.Suspect;
import clue.enums.Weapon;

/**
 *
 * @author Shawn
 */
public abstract class Player2 {
	public abstract void gameStarted(GameState2 gs);
	public abstract Path move(GameState2 gs, int dice);
	public abstract Triplet<Room, Suspect, Weapon> suggest(GameState2 gs);
	public abstract Card refute(
			GameState2 gs,
			Integer suggestingPlayerID,
			Triplet<Room, Suspect, Weapon> suggestion
			);
	public abstract void informMove(
			GameState2 gs,
			Integer movingPlayerID,
			Square s
			);
	public abstract void informSuggestion(
			GameState2 gs,
			Integer suggestingPlayerID,
			Triplet<Room, Suspect, Weapon> suggestion
			);
	public abstract void informFailureToRefute(
			GameState2 gs,
			Integer failedPlayerID,
			Triplet<Room, Suspect, Weapon> suggestion
			);
	public abstract void informRefutation(
			GameState2 gs,
			Integer refutingPlayerID,
			Card refutingCard
			);
	public abstract void informRefutationHidden(
			GameState2 gs,
			Integer refutingPlayerID,
			Integer suggestingPlayerID,
			Triplet<Room, Suspect, Weapon> suggestion
			);
	public abstract void gameEnded(
			GameState2 gs,
			Integer winnerID,
			Triplet<Room, Suspect, Weapon> winningAccusation
			);
	public abstract void informFailedAccusation(
			GameState2 gs,
			Integer failedPlayerID,
			Triplet<Room, Suspect, Weapon> failedAccusation
			);
	public abstract Triplet<Room, Suspect, Weapon> accuse(GameState2 gs);
}
